import request from '@/utils/request'

// 角色接口类型定义
export interface Role {
  id: number
  name: string
  description: string
  status: number
  created_at: string
  updated_at: string
}

// 角色详情（包含权限和菜单）
export interface RoleDetail {
  role: Role
  permissions: Permission[]
  menus: Menu[]
}

// 权限信息
export interface Permission {
  id: number
  name: string
  code: string
  description: string
  status: number
  created_at: string
  updated_at: string
}

// 菜单信息
export interface Menu {
  id: number
  parent_id?: number
  name: string
  path: string
  component: string
  redirect?: string
  meta?: {
    title?: string
    icon?: string
    affix?: boolean
    hidden?: boolean
  }
  sort: number
  hidden: boolean
  status: number
  created_at: string
  updated_at: string
}

// 创建角色请求
export interface RoleCreateRequest {
  name: string
  description?: string
  status?: number
  permission_ids?: number[]
  menu_ids?: number[]
}

// 更新角色请求
export interface RoleUpdateRequest {
  name: string
  description?: string
  status?: number
}

// 更新角色权限请求
export interface RolePermissionsUpdateRequest {
  permission_ids: number[]
}

// 更新角色菜单请求
export interface RoleMenusUpdateRequest {
  menu_ids: number[]
}

// 角色列表查询参数
export interface RoleListParams {
  page?: number
  page_size?: number
  keyword?: string
}

// 角色列表响应
export interface RoleListResponse {
  list: Role[]
  total: number
  page: number
  page_size: number
}

/**
 * 获取角色列表
 */
export function getRoleList(params?: RoleListParams): Promise<RoleListResponse> {
  return request.get('/roles', { params })
}

/**
 * 获取所有角色（用于用户分配）
 */
export function getAllRoles(): Promise<Role[]> {
  return request.get('/roles/all')
}

/**
 * 获取角色详情
 */
export function getRoleDetail(id: number): Promise<RoleDetail> {
  return request.get(`/roles/${id}`)
}

/**
 * 创建角色
 */
export function createRole(data: RoleCreateRequest): Promise<Role> {
  return request.post('/roles', data)
}

/**
 * 更新角色
 */
export function updateRole(id: number, data: RoleUpdateRequest): Promise<Role> {
  return request.put(`/roles/${id}`, data)
}

/**
 * 删除角色
 */
export function deleteRole(id: number): Promise<{ message: string }> {
  return request.delete(`/roles/${id}`)
}

/**
 * 更新角色状态
 */
export function updateRoleStatus(id: number, status: number): Promise<{ message: string }> {
  return request.put(`/roles/${id}/status`, { status })
}

/**
 * 更新角色权限
 */
export function updateRolePermissions(id: number, data: RolePermissionsUpdateRequest): Promise<{ message: string }> {
  return request.put(`/roles/${id}/permissions`, data)
}

/**
 * 更新角色菜单
 */
export function updateRoleMenus(id: number, data: RoleMenusUpdateRequest): Promise<{ message: string }> {
  return request.put(`/roles/${id}/menus`, data)
}

/**
 * 获取角色权限列表
 */
export function getRolePermissions(id: number): Promise<Permission[]> {
  return request.get(`/roles/${id}/permissions`)
}

/**
 * 获取角色菜单列表
 */
export function getRoleMenus(id: number): Promise<Menu[]> {
  return request.get(`/roles/${id}/menus`)
}
